package unit4.task4_4;

public class HireUserTest3 {
    //校验是否是数字
    public boolean isDigit(String input) {
        boolean flag = true;
        char[] inputs = input.toCharArray();
        for (int i = 0; i < inputs.length; i++) {
            char c = inputs[i];
            //判断字符是否为数字
            if (!Character.isDigit( c )) {
                flag = false;
                break;
            } else {
                continue;
            }
        }
        return flag;
    }

    //邮箱验证
    public boolean checkEmail(String email) {
        boolean flag = false;
        try {
            String check = "^([a-z0-9A-Z]+[-|.?])+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?.+[a-zA-Z]{2,}$";
            Pattern regex = Pattern.compile( check );
            Matcher matcher = regex.matcher( email );
            flag = matcher.matches();
        } catch (Exception e) {
            flag = false;
        }
        return flag;
    }

    //18位身份证校验，校验规则：18位，出生年份：1930-2013，月份：01-12，日期：1-31
    public boolean checkCardID(String cardID) {
        boolean flag = true;
        //判断输入身份证号码的长度是否是18位
        if (cardID.length() == 18) {
            String yearStr = cardID.substring( 6, 10 );
            String monthStr = cardID.substring( 10, 12 );
            String dayStr = cardID.substring( 12, 14 );

            //判断身份证中的年、月、日是否正确
            flag = this.checkDate( yearStr, monthStr, dayStr );
        } else {
            System.out.println( "您输入的身份证号码：" + cardID + "长度不对！" );
        }
        return flag;
    }

    //检验身份证中年月日是否合法
    public boolean checkDate(String yearStr, String monthStr, String dayStr) {
        boolean flag = true;
        //判断月份是否在1930-2013之间
        int year = Integer.parseInt( yearStr );
        System.out.println( "year=" + year );
        if (year < 1930 || year > 2013) {
            flag = false;
            System.out.println( "您输入的身份证号不在1930-2013之间" );
        }
        //判断月份是否合法
        char c = monthStr.charAt( 0 );
        if (c == '0') {
            //如果月份小于10，去除0
            monthStr = monthStr.substring( 1 );
        }
        int month = Integer.parseInt( monthStr );
        if (month < 1 || month > 12) {
            flag = false;
            System.out.println( "您输入的身份证月份不正确！" );
        }
//判断日期是否合法
        char d = dayStr.charAt( 0 );
        if (d == '0') {
            //如果月份小于10，去除0
            dayStr = dayStr.substring( 1 );
        }
        int day = Integer.parseInt( dayStr );
        GregorianCalendar gc = new GregorianCalendar( year, month, day );
        //判断是否是闰年
        boolean isLeap=gc.isLeapYear( year );

        //月份是1、3、5、7、8、10、12，day在1-31之间
        if (month==1||month==3||month==5||month==7||month==8
                ||month==10||month==12){
            if (day<1||day>31){
                flag=false;
                System.out.println( "您输入的身份证中的日期不正确！" );
            }
        }
        //月份是2、4、6、9、11 day在1-30之间
        if (month==2||month==4||month==6||month==9||month==11){
            if (day<1||day>30){
                flag=false;
                System.out.println( "您输入的身份证中的日期不正确！" );
            }
        }
        //闰年并且月份是在2月，day在1-29之间
        if (isLeap&&month==2){
            if (day<1||day>29){
                flag=false;
                System.out.println( "您输入的身份证中的日期不正确！" );
            }
        }
        //不是闰年月份是2月，day在1-28之间
        if (!isLeap&&month==2){
            if (day<1||day>28){
                flag=false;
                System.out.println( "您输入的身份证中的日期不正确！" );
            }
        }
        return  flag;
    }
    //输入的字符串转换为日期类型
    public Date strTransDate(String inputDate){
        DateFormat dateFormat=new SimpleDateFormat( "yyyy-MM-dd" );
        Date date=null;
        try{
            date=dateFormat.parse(inputDate);
        }
        catch (ParseException e){
            e.printStackTrace();
        }
        return   date;
    }
/输入求租客户信息：增加输入校验
    public  HireUser inutHireUserInfo(){
        Scanner sc=new Scanner( System.in

        );
        System.out.println( "请输入求租客户编号：" );
        int userID=sc.nextInt();

        System.out.println( "请输入求租客户姓名：" );
        String userName=sc.next();

        System.out.println( "请输入求租客户性别：" );
        String sexStr=sc.next();
        char sex=sexStr.charAt( 0 );

        System.out.println( "请输入求租客户电话：" );
        String phone=sc.next();

        //校验phone
        boolean checkPhone=this.isDigit( phone );
        if (!checkPhone){
            System.out.println( "您输入的电话不正确！" );
        }
        System.out.println( "请输入求租客户家庭电话：" );
        String homePhone=sc.next();

        System.out.println( "请输入求租客户邮箱：" );
        String email=sc.next();

        //校验邮箱
        boolean checkEmail=this.checkEmail( email );
        if (!checkEmail){
            System.out.println( "您输入的邮箱不正确！" );
        }
        System.out.println( "请输入求租客户QQ号码：" );
        String qq=sc.next();
//校验QQ号码
        boolean checkQq=this.checkQQ( qq );
        if (!checkQq){
            System.out.println( "您输入的QQ号码不正确！" );
        }

        System.out.println( "请输入求租客户身份证号码：" );
        String cardID=sc.next();

        //校验身份证号码
        boolean checkCardID=this.checkCardID( cardID );
        if (!checkCardID){
            System.out.println( "您输入的身份证号码不正确！" );
        }
        System.out.println( "请输入求租客户编号：" );
        String hirePersonNo=sc.next();

        //记录日期
        System.out.println( "请输入记录日期，格式：yyyy-MM-dd" );
        String recordDateStr=sc.next();
        //输入的字符串r转换为日期类型
        Date recordDate=this.strTransDate( recordDateStr );

        //创建客户求租对象
        HireUser hireUser=new HireUser();
        hireUser.setUserID(userID);
        hireUser.setUserName(userName);
        hireUser.setSex(sex);
        hireUser.setPhone(phone);
        hireUser.setHomePhone(homePhone);
        hireUser.setEmail(email);
        hireUser.setQq(qq);
        hireUser.setCardID(cardID);
        hireUser.setHirePersonNo(hirePersonNo);
        hireUser.setRecordDate(recordDate);

        return  hireUser;
    }
    public  static  void  main(String[] args){
        //创建HireUserTesk3对象
        HireUserTest3 ht=new HireUserTest3();
        System.out.println( "添加求租客户信息！" );
        //输入求租客户信息
        HireUser hireUser=ht.inutHireUserInfo();

        HireUserDAOImp hireUserDAOImp=new HireUserDAOImp();
        //判断求租客户是否存在
        boolean isExis=hireUserDAOImp.isExis(hireUser);
        if (isExis){
            //求租客户已存在
            System.out.println( "您的输入有错误，该用户已不存在" );
        }
        else {
            //求组客户不存在
            //添加求租客户信息
            hireUserDAOImp.insertUser(hireUser);
            System.out.println( "添加求租用户成功！" );
        }
    }
    }
